<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 继承 
        // 让一个子类(构造函数)  去 继承 父类 (构造函数) 的 属性和方法 (原型对象  实例化对象)  
        // 改写父类的方法  (方法重载)
        // 新增一些方法和属性  (多态)

        // 继承的目的是为了实现 代码复用 高度融合  


        function Person(name,age){
            this.name = name;
            this.age = age 
        }

        Person.prototype.type = "Human";
        Person.prototype.skill = function(){
            console.log("语言交流 -   思想思考")
        }
        Person.prototype.say = function(){
            console.log(this.name,this.age)
        }

        var p = new Person("zkl","28");
        console.log(p)

        // 继承 
        // 1. 构造函数继承  call apply  改变this的指向
        // 通过调用 父类的构造函数 强制把 父类的构造函数的this 改变 指向 子类创建的实例化对象 
        // 缺点   只继承 父类的实例相关的属性和方法  没有继承原型对象  prototype
        function Student(name,age,grade){
            // this.name  = name;
            // this.age = age;
            // Person.call(this,name,age);
            Person.apply(this,[name,age])   // 调用父类的 构造器  强制把this改变 指向 Student
            this.grade = grade;
        }

        var stu = new Student("小虎",20,80);
        console.log(stu);
        console.log(stu.type)
    </script>
</body>
</html>